/**
 * 
 */
package org.ztest.spring.di;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

/**
 * @author lhl
 *
 * 2015年7月15日上午9:10:02
 */
@Configuration
@ComponentScan
public class SpringDI
{
	// 标记该方法会产生一个Bean，如果指定了name属性，则可以通过ctx.getBean(name)方法取到bean
	// 若指定了多个name，那么可以通过其中任意一个name取到bean
	// 如果没有指定name，那么Bean的名字就是该方法名ctx.getBean("mockMessageService")
	@Bean(name = {"ms", "google"})
	MessageService mockMessageService()
	{
	    System.out.println("Create messageservice");
		return new MessageServiceImpl();
	}
	
	@Bean
	@Primary
	QuizMaster mockQuizMaster2()
	{
	    System.out.println("Create springquizmaster");
		return new SpringQuizMaster();
	}
	
	// 这里提供了2个QuizMaster的生产方法，可以通过ctx.getBean(name)方法取到Bean，name为该方法名
	// 或者也可以通过指定具体类型取到Bean，比如ctx.getBean(StrutsQuizMaster.class)，但这要求同时
	// 只能有一个方法返回StrutsQuizMaster。
	// 当然也可以通过指定Bean的name属性，以便通过ctx.getBean(name)方法取到Bean
	@Bean
	QuizMaster mockQuizMaster()
	{
	    System.out.println("Create strutsquizmaster");
		return new StrutsQuizMaster();
	}
}
